<?php
$a_list = array(

            1=>array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),

            2=>array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
			
			3=>array('ID'=>3, 'PARENT'=>4, 'NAME'=>'儿子'),

            4=>array('ID'=>4, 'PARENT'=>1, 'NAME'=>'叔伯'),

            5=>array('ID'=>5, 'PARENT'=>2, 'NAME'=>'自己')



            );
        //树型展开.   
        asort($a_list);
	    echo_arr($a_list);echo '<br/>';
		//保持源数组不受污染
		$b_list = $c_list  = $a_list;
        //将数组转变成树，因为使用了引用，所以不会占用太多的内存，一行代码搞定
        foreach ($b_list as $id => $item){
			if ($item['PARENT']){
                if(isset($b_list[$item['PARENT']]['tup'][$item['PARENT']])===false)
					$b_list[$item['ID']]['tup'][$item['PARENT']] = $b_list[$item['PARENT']];
			}
		}
        foreach ($c_list as $id => $item){
			if ($item['PARENT']){
                         $c_list[$item['PARENT']]['sub'][$item['ID']] = &$c_list[$id];
        }
                }
                //$b_list;  记录着id及向上辈份的数组. 即将顶级数组记录.
                //$c_list;  记录着id及向下辈份的数组. 即将下级数组记录.
			//	echo '<pre>';
        echo_arr($b_list);


function echo_arr($arr){
	foreach($arr as $val){
		print_r($val);
		echo '<br/>';
	}
}

		?>